package leetcode;

public class aboutTree {
    static class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        private TreeNode(){}
        private TreeNode(int value){
            this.val = value;
        }
    }


    //输入AB两个树  判断B是不是A的子树 相同的节点具有相同的值
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if (root1==null || root2 == null){
            return false;
        }
        //首先在大树里寻找小树根节点值相同的节点，然后以此节点为根节点和小树进行比较
        if (root1.val==root2.val && judge(root1,root2)){
            return true;
        }
        return HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
    }

    //使用递归 对节点进行判定
    public static boolean judge(TreeNode root1,TreeNode root2){
        if (root2==null){
            return true;
        }
        if (root1==null){
            return false;
        }
        if (root1.val==root2.val){
            return judge(root1.left, root2.left)&&judge(root1.right,root2.right);
        }
        return false;
    }
}
